Python X IoT X GrovePi その1

こんばんは
久しぶりの投稿で、
タイトル思いつかなかったのでハンターハンターのようなタイトルですが。
RaspberryPiを使った簡単なIoTのソースを作成しました。
具体的な説明はその2で行いますが送信側と受信側のソースを張ります。

送信側(光検知用ソース(getLightSensor.py))

送信側ソースですが、1秒ごとに光を検知し、
一定時間指定の明るさの値を検出したら受信側にWebSocket通信で送信します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import grovepi #GrovePIを使う際のモジュール
import time
import asyncio
import ws_send as ws #WebSocket送信用モジュール

ALERT_MESSAGE = "ラズパイからのalert!!"
ALERT_CNT = 600 #検出秒を指定(例として600秒(10分))

light_sensor_port = 1

grovepi.pinMode(light_sensor_port,"INPUT")

#検知秒数
cnt = 0

while True:
try:
#初期化
sensor_value = 0.0
resistance = 0.0

#光測定
sensor_value = grovepi.analogRead(light_sensor_port)
print(sensor_value)

if sensor_value > 500:
#測定値が500の場合、明るいと判断とする。
cnt += 1
else:
#一度でも500未満の場合は、リセットする。
cnt = 0

if cnt == ALERT_CNT:
#明るい時が指定秒(10分)経った場合は、アラート。
print(ALERT_MESSAGE)
asyncio.run(ws.alert_send(ALERT_MESSAGE))
print("送信完了")
cnt = 0

time.sleep(1) #1秒停止

except KeyboardInterrupt:
break

except (IOError,TypeError) as e:
print("Error: "+str(e))
break

送信側(WebSocket送信用モジュール(ws_send.py))

1
2
3
4
5
6
7
import asyncio
import websockets

async def alert_send(message):
uri = "ws://192.168.xxx.xxx:xxxx" #送信先アドレス
async with websockets.connect(uri) as websocket:
await websocket.send(message)

受信側(socketReceiver.py)

受信サーバーを起動し、送信側からWebSocket通信で送られたら
受信します。
受信した際はコンソール出力として
“受信した内容:ラズパイからのalert!!”と表示され、光検知したら受信側(別PC)に送信されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import asyncio
import websockets
import time

async def accept(websocket, path):
#受信を待つ
print("受信待機中・・・")
message = await websocket.recv()
print("受信した内容:"+message)
while True:
str = input("please key.....")
if str == 'quit':
#quit入力したらwebsocket終了
await websocket.close()
print("サーバーを閉じました")
asyncio.get_running_loop().stop()
time.sleep(3)
return
else:
#そのまま入力したら再度受信待ちへ
break

def main():
start_server = websockets.serve(accept, "192.168.xxx.xxx", xxxx) #受信側のIPアドレスとポート番号を記載し、サーバーを立ち上げる
print("サーバー起動")
asyncio.get_event_loop().run_until_complete(start_server)
if not (asyncio.get_event_loop().is_closed()):
asyncio.get_event_loop().run_forever()

print("終了")

main()

ひとまず今日は夜中なのでこれまで
続き(詳しいこと)は今週末に書こうかと思います。

お疲れ様でした。

今回の記事のオススメ曲

Lotus Juiceといえばペルソナシリーズの楽曲で歌ってるラッパーです。
この曲はLotus Juiceさんのアルバムに収録されてる曲です。
いやーかっこいいですね。


では、また次回。